[IA64] Use domheap instead of xenheap for P2M table
authorawilliam@xenbuild2.aw <awilliam@xenbuild2.aw>
Wed, 14 Mar 2007 15:33:40 +0000 (09:33 -0600)
committerawilliam@xenbuild2.aw <awilliam@xenbuild2.aw>
Wed, 14 Mar 2007 15:33:40 +0000 (09:33 -0600)
This allows larger memory configurations without exhausting xenheap.
New boot option 'p2m_xenheap' reverts to previous behavior.

Signed-off-by: Kouya Shimura <kouya@jp.fujitsu.com>
xen/arch/ia64/xen/mm.c

index 4d11f1b76b762d31eb00c308a023695a6dd1983a..03a71a7f9e3782cba12edc082d3a5ec8ee3eb8ca 100644 (file)
@@ -1903,9 +1903,20 @@ void __free_pages(struct page_info *page, unsigned int order)
        free_xenheap_page(page);
 }
 
+static int opt_p2m_xenheap;
+boolean_param("p2m_xenheap", opt_p2m_xenheap);
+
 void *pgtable_quicklist_alloc(void)
 {
     void *p;
+    if (!opt_p2m_xenheap) {
+        struct page_info *page = alloc_domheap_page(NULL);
+        if (page == NULL)
+            return NULL;
+        p = page_to_virt(page);
+        clear_page(p);
+        return p;
+    }
     p = alloc_xenheap_pages(0);
     if (p)
         clear_page(p);
@@ -1914,7 +1925,10 @@ void *pgtable_quicklist_alloc(void)
 
 void pgtable_quicklist_free(void *pgtable_entry)
 {
-       free_xenheap_page(pgtable_entry);
+    if (!opt_p2m_xenheap)
+        free_domheap_page(virt_to_page(pgtable_entry));
+    else
+        free_xenheap_page(pgtable_entry);
 }
 
 void put_page_type(struct page_info *page)